/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

// 判断两树是否相同
// 我们从树的头开始依次向下递归,设置条件为如果两个同时为空,且前面的值如果没有不同就返回真
// 如果中途任何一个节点空了且另外树的相应节点不为空,或者两个同位置的节点的值不同就返回假
// 而对称二叉树也是使用了该思路,只不过将一颗整树分为了左右两个子树开始比对是否是相同的树而已,其算法思想差不多

bool isSameTree(struct TreeNode* p , struct TreeNode* q) 
{

    if (p == NULL && q == NULL)
    {

        return true ;

    }
    
    if (p == NULL || q == NULL)
    {

        return false ;

    }

    if (p -> val != q -> val)
    {
        
        return false ;

    }

    return isSameTree (p -> left , q -> left) && isSameTree (p -> right , q -> right) ;

}